package com.candoit.webapps.pricing.controllers;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.candoit.webapps.pricing.model.OrdenTrabajo;
import com.candoit.webapps.pricing.model.OrdenTrabajoMes;
import com.candoit.webapps.pricing.model.OrdenesTrabajoMesFK;
import com.candoit.webapps.pricing.util.OrdenTrabajoUtil;
import com.candoit.webapps.pricing.util.QueryUtil;

@ManagedBean(name = "ordentrabajoCtrl")
@ViewScoped
public class OrdenTrabajoController extends AbstractController {
	
	private List<OrdenTrabajoUtil> ordenes;
	
	private Integer totalPedidos = 0;
	
	private Integer mesActual;

	public List<OrdenTrabajoUtil> getOrdenes() {
		if (ordenes == null){
			this.fillOrdenes();
		}
		return ordenes;
	}

	public void setOrdenes(List<OrdenTrabajoUtil> ordenes) {
		this.ordenes = ordenes;
	}
	
	private void fillOrdenes(){
		List<OrdenTrabajo> list = new ArrayList<OrdenTrabajo>();

		Calendar cal = new GregorianCalendar();
		Date fechaActual = new Date();
		cal.setTime(fechaActual);
		mesActual = cal.get(Calendar.MONTH);
		
		list= QueryUtil.getInstance().getOrdenesTrabajo();
		if (list.isEmpty()){
			List<OrdenTrabajo> otList = QueryUtil.getInstance().getOrdenesTrabajo();
			Iterator<OrdenTrabajo> it = otList.iterator();
			while (it.hasNext()){
				   OrdenTrabajo ot = (OrdenTrabajo) it.next();
				   list.add(ot);
			}
		}
		ordenes = new ArrayList<OrdenTrabajoUtil>();
		OrdenTrabajoUtil util = new OrdenTrabajoUtil();
		OrdenTrabajo otMesPrimero = list.get(0);
		if (otMesPrimero.getId() == OrdenTrabajo.AUTOMATICA_CODE){
			util.setOrdenTrabajoAutomatico(otMesPrimero);
		}else if (otMesPrimero.getId() == OrdenTrabajo.ARTESANAL_CODE){
			util.setOrdenTrabajoArtesanal(otMesPrimero);
		}
		
		OrdenTrabajo otMesSegundo = list.get(1);
		if (otMesSegundo.getId() == OrdenTrabajo.AUTOMATICA_CODE){
			util.setOrdenTrabajoAutomatico(otMesSegundo );
		}else if (otMesSegundo.getId() == OrdenTrabajo.ARTESANAL_CODE){
			util.setOrdenTrabajoArtesanal(otMesSegundo );
		}
		
		util.setDescripcion("Cantidad");
		Integer total = util.getOrdenTrabajoArtesanal().getCantidad() + util.getOrdenTrabajoAutomatico().getCantidad();
		Double artesanal = 0.00d;
		Double automatico = 0.00d;
		if (total > 0){	
			artesanal = (double) (util.getOrdenTrabajoArtesanal().getCantidad() *100/ total.doubleValue());
			automatico = (double) (util.getOrdenTrabajoAutomatico().getCantidad() *100/ total.doubleValue());
		}	
		util.setPorcentajeArtesanal(artesanal);
		util.setPorcentajeAutomatico(automatico);
		ordenes.add(util);
		
		
	}

	public void setTotalPedidos(Integer totalPedidos) {
		this.totalPedidos = totalPedidos;
	}
	
	public Integer getMesActual() {
		return mesActual;
	}

	public void setMesActual(Integer mesActual) {
		this.mesActual = mesActual;
	}

	public void saveOrdenesTrabajo(){
		OrdenTrabajoUtil ot  = ordenes.get(0);
		this.update(ot.getOrdenTrabajoArtesanal());
		this.update(ot.getOrdenTrabajoAutomatico());
	}
	
	public void change(){
		OrdenTrabajoUtil util = ordenes.get(0);
		Integer total = util.getOrdenTrabajoArtesanal().getCantidad() + util.getOrdenTrabajoAutomatico().getCantidad();
		Double artesanal = 0.00d;
		Double automatico = 0.00d;
		if (total > 0){	
			artesanal = (double) (util.getOrdenTrabajoArtesanal().getCantidad() *100/ total.doubleValue());
			automatico = (double) (util.getOrdenTrabajoAutomatico().getCantidad() *100/ total.doubleValue());
		}	
		util.setPorcentajeArtesanal(artesanal);
		util.setPorcentajeAutomatico(automatico);
		FacesContext.getCurrentInstance().renderResponse();
	}
}
